"use strict";

const Controller = require("egg").Controller;

class CodeController extends Controller {
    /**
     * 获取验证码
     */
    async create() {
        // 获取路径参数
        const { mobile } = this.ctx.params;
        // 手机号格式校验
        if (!/^1[35789]\d{9}$/.test(mobile)) {
            this.ctx.body = {
                code: 400,
                message: "手机号码格式不正确",
            };
            return;
        }
        // 检查是否存在该手机号对应的验证码
        let res = await this.service.code.findByMobile(mobile);
        // 数据库保存的有验证码
        if (res) {
            // 检查是不是在 60 秒内
            const allowTime = Date.parse(res.create_time) + 60000;
            // 在 60 秒内，不允许频繁获取
            if (Date.now() < allowTime) {
                this.ctx.body = {
                    code: 403,
                    data: {
                        create_time: res.create_time,
                    },
                    message: "60 秒内不能重复获取验证码",
                };
                return;
            }
            // 重新生成
            await this.service.code.remove(mobile);
        }
        // 只有注册的用户，才能获取验证码
        const code = Math.floor(Math.random() * 1000000);
        // 保存到数据库
        res = await this.service.code.create(mobile, code);
        // 判断是否存储成功
        if (res.affectedRows !== 1) {
            this.ctx.body = {
                code: 500,
                message: "验证码生成失败",
            };
            return;
        }
        // 成功
        this.ctx.body = {
            code: 201,
            message: "验证码发送成功",
        };
    }
}

module.exports = CodeController;
